package com.esyoga.yoyoga.handler;

import com.esyoga.yoyoga.pojo.DTO.MomentsDTO;
import com.esyoga.yoyoga.pojo.TMoments;
import com.esyoga.yoyoga.service.MomentsService;
import com.esyoga.yoyoga.util.CutPagesUtil;
import lombok.Data;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/*
学员部分社区
 */
@Data
@Controller
@RequestMapping("/moments")
public class MomentsHandler {
    @Resource
    MomentsService momentsService;
    //查询社区表展示动态(所有人可见),用一个dto来接收，方便将用户动态与用户信息对应,分页展示
    @RequestMapping("/findMomentsToAllUser")
    @ResponseBody
    public Map<String,Object> findMomentsToAllUser(Integer page){
        List<MomentsDTO> momentsDTOList= momentsService.findMomentsToAllUser();
       // System.out.println(momentsDTOList);
        CutPagesUtil.clear();
        CutPagesUtil.setPageInfo(page,2);
        List<MomentsDTO> momentsDTOS=CutPagesUtil.getPages(momentsDTOList);
       int total= CutPagesUtil.getTotalPage();
        Map<String,Object> result=new HashMap<String,Object>();
        result.put("total",total);
        result.put("momentsDTOS",momentsDTOS);
        //System.out.println(result);

        return result;
    }

   /* 查询社区动态(仅好友可见),查询仅好友可见和所有人可见动态的用户id，
   以及对应的类型，遍历（1）加上当前登录的用户id，去关注表查询与当前登录的人互相关注的人的id集合（2），将（1）的遍历
   与（2）匹配，如果包含，就去对应用户类型的表查出数据，封装为一个DTO，最后返回一个map集合
分页查询
   */
   @RequestMapping("/findMomentsToPartUser")
   @ResponseBody
   //封装一个dto用于前端向后台传送当前用户id和当前页码
    public Map<String,Object> findMomentsToPartUser(Integer userId,Integer userType,Integer page){
       //System.out.println(userId+"      "+userType);
      /* Integer userId=userIdAndPageDTO.getUserId();
       Integer page=userIdAndPageDTO.getPage();*/
        //查询所有仅好友可见和所有人可见动态的用户
       List<MomentsDTO> momentsDTOList=momentsService.findMomentsToPartUser(userId,userType);
       System.out.println("好友可见："+momentsDTOList);
       CutPagesUtil.clear();
       CutPagesUtil.setPageInfo(page,2);
       List<MomentsDTO> momentsDTOS=CutPagesUtil.getPages(momentsDTOList);
       //System.out.println(momentsDTOS);
       int total= CutPagesUtil.getTotalPage();
       Map<String,Object> result=new HashMap<String,Object>();
       result.put("total",total);
       result.put("momentsDTOS",momentsDTOS);

       return result;
    }

    /*
    分页展示仅自己可见动态，传入当前用户id和当前用户类型和当前页码，只显示仅自己可见的
     */
    @RequestMapping("/findMomentsToOnlyYou")
    @ResponseBody
    public Map<String,Object> findMomentsToOnlyYou(Integer userId,Integer userType,Integer page){
        //获得仅自己可见动态和自己的头像等信息
        Map<String,Object> map=  momentsService.findMomentsToOnlyYou(userId,userType);
       //取出动态的集合
        List<TMoments> tMomentsList=(List<TMoments> )map.get("tMomentsList");
        //移除map中原来的动态集合
        map.remove("tMomentsList");
        //分页
        CutPagesUtil.clear();
        CutPagesUtil.setPageInfo(page,2);
        List<TMoments> tMomentsList1=CutPagesUtil.getPages(tMomentsList);
        int total= CutPagesUtil.getTotalPage();
        Map<String,Object> result=new HashMap<String,Object>();
        map.put("total",total);
        map.put("momentsList",tMomentsList1);
        return map;
    }
    //删除动态，根据动态的id进行软删除
    @RequestMapping("/delMomentsById")
    @ResponseBody
public String delMomentsById(Integer mId){
       String result= momentsService.delMomentsById(mId);
        return result;
}
//发表一条动态,发送时用户可选择仅自己可见，所有人可见，仅好友可见
    @RequestMapping("/addOneMoments")
    @ResponseBody
public String addOneMoments(TMoments tMoments){

        Date date=new Date();
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       String time= df.format(date);
       tMoments.setmTime(time);
       String result= momentsService.addOneMoments(tMoments);
        return result;
}
/*前端如果判断此评论点赞数为0，那么只显示点赞，点击点赞或取消点赞，当点击了点赞按钮后才出现取消点赞按钮
 ，后台点赞数加减一，根据当条动态的发起者的id和类型,点赞或取消赞用+-1表示，当前点赞数
 前端用不同请求的返回值来展示点赞成功或失败
 */
    @RequestMapping("/addOneLikeNum")
    @ResponseBody
    public String addOneLikeNum(Integer currentLikenum,Integer mid,Integer likenum){
String result=momentsService.addOneLikeNum(currentLikenum,mid,likenum);
       // System.out.println(result);
        return result;

    }

}
